function curry(fn, args = []) {
    const len = fn.length;

    return function () {
        const _args = args.slice(0);
        for (let i = 0; i < arguments.length; i++) {
            _args.push(arguments[i]);
        }

        if (_args.length < len) {
            return curry.call(this, fn, _args);
        }

        return fn.apply(this, _args);
    };
}

function add(a, b, c) {
    console.log('add:', a, b, c);
}

const _add = curry(add);
// _add(1, 2, 3);
_add(1, 2)(3);
// _add(4)(5)(6);
